#include "Sql_list.h"

// 顺序表的初始化：
void Init_Sql_List(Sql_list * L)
{
    L->len = 0;
}

//尾插
void tail_insert_list(Sql_list * L  , Elenemt_data data)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (MAX_SIZ <= L->len)
    {
        printf("顺序表 为 满 \n");
        return ;
    }

    // 插入
    L->data[L->len] = data;
    // 迭代
    L->len++;

}

//尾删
void tail_del_list(Sql_list * L )
{
    // 安排判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (0 >= L->len)
    {
        printf("顺序表 内 无数据 \n");
        return ;
    }

    L->len--;

}

void pos_insert_list(Sql_list * L , int index , Elenemt_data data){
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (0 >= L->len)
    {
        printf("顺序表 内 无数据 \n");
        return ;
    }
    for (size_t i = L->len; i >= index; i--)
    {
        L->data[i] = L->data[i - 1];
    }
    L->data[index-1]=data;
    L->len++;
    
}
//静态顺序表任意删除
void pos_del_list(Sql_list * L , int index){
    for (size_t i = index-1; i <L->len-1 ; i++)
    {
        L->data[i]=L->data[i+1];  
    }
    L->len--;
}

// 遍历打印顺序表
void printf_Sql_List(Sql_list * L)
{
    // 安全判断
    if (NULL == L)
    {
        printf("顺序表 为 NULL \n");
        return ;
    }
    if (0 == L->len)
    {
        printf("顺序表 内 无数据 \n");
        return ;
    }

    for (size_t i = 0; i < L->len; i++)
    {
        printf("姓名:%s 性别:%s 年龄:%d 成绩:%d 学号:%d\n",
        L->data[i].name , L->data[i].sex , L->data[i].age , 
        L->data[i].sco  , L->data[i].id 
        );
    }
}
// 顺序表的合并：
Sql_list Merge_Sql_Lists(Sql_list * L1 , Sql_list * L2)
{
    Sql_list L3;
    Init_Sql_List(&L3);
    // 安全判断
    if (NULL == L1 || NULL == L1)
    {
        printf("顺序表 为 NULL \n");
        return L3;
    }
    if (MAX_SIZ < L1->len + L2->len )
    {
        printf("顺序表 有越界的风险 \n");
        return L3;
    }
    if (0 == L2->len)
    {
        printf("L2 中 无数据\n");
        return L3;
    }
    
    for (size_t i = 0; i < L1->len; i++)
    {
        tail_insert_list(&L3 , L1->data[i]);
    }
    for (size_t i = 0; i < L2->len; i++)
    {
        tail_insert_list(&L3 , L2->data[i]);
    }

    return L3;
}


